#include <REGX52.H>

/**
  * @brief  定时器0初始化，1毫秒@11.0592MHz
  * @param  无
  * @retval 无
  */
void Timer0_Init(void)
{
    TMOD &= 0xF0;        // 清除定时器0模式位（仅保留定时器1模式）
    TMOD |= 0x01;        // 设置定时器0为模式1（16位自动重装模式）
    TL0 = 0x66;          // 设置定时初值（低8位），11.0592MHz下1ms精准匹配
    TH0 = 0xFC;          // 设置定时初值（高8位），计算逻辑：65536 - 922 = 64614 = 0xFC66
    TF0 = 0;             // 清除定时器0溢出标志
    TR0 = 1;             // 定时器0开始计时
    ET0 = 1;             // 开启定时器0中断
    EA = 1;              // 开启总中断
    PT0 = 0;             // 定时器0中断优先级为低（可根据需求改为1设为高优先级）
}

/* 定时器中断函数模板（1ms中断一次，可直接使用）
void Timer0_Routine() interrupt 1
{
    static unsigned int T0Count;
    TL0 = 0x66;          // 重新加载定时初值（低8位），避免中断后计时偏差
    TH0 = 0xFC;          // 重新加载定时初值（高8位）
    T0Count++;
    if(T0Count >= 1000)  // 每1000次中断 = 1秒（可根据需求修改计数阈值）
    {
        T0Count = 0;
        // 此处可添加1秒触发一次的业务逻辑（如LED翻转、计时更新等）
    }
} */